/*
 * @(#)XfspBestPruneSimplifier.java        2004/08/01
 *
 * This file is part of Xfuzzy 3.1, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfsp.model.rulebases;

import xfuzzy.lang.KnowledgeBase;

/**
 * <p> <b>Descripci�n:</b> clase de objetos que permiten la simplificaci�n de
 * bases de reglas mediante la reducci�n de �stas a las n mejores reglas, donde
 * se entiende por mejor aquella regla que tiene un mayor grado de activaci�n.
 * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS>
 * @author Jorge Agudo Praena
 * @version 1.2
 * @see XfspModel
 * @see XfspPrunning
 * @see XfspNumberedPrunning
 * @see XfspWorstPrunning
 *
 */
public class XfspBestPruneSimplifier
    extends XfspNumberedPruning {

  //n�mero de reglas que deber� conservar la base de reglas tras la
  //simplificaci�n
  private int best;

  /**
   * <p> <b>Descripci�n:</b> crea un simplificador de bases de reglas de
   * sistemas difusos que conserva las reglas con m�s alto grado de activaci�n
   * y elimina el resto.
   * @param pattern Patr�n de datos para las entradas de las reglas.
   * @param best N�mero de reglas que deber� conservar la base de reglas tras
   * su simplificaci�n.
   *
   */
  public XfspBestPruneSimplifier(double[][] pattern, int best) {
    //llama al constructor de la clase padre
    super(pattern);
    //almacena el n�mero de funciones que debe conservar la base de reglas tras
    //la simplificaci�n
    this.best = best;
  }

  /**
   * <p> <b>Descripci�n:</b> devuelve el �ndice que ocupa la �ltima regla
   * seleccionada por el simplificador dentro de una lista de reglas
   * ordenadas por su grado de activaci�n.
   * @return �ndice ocupado por la �ltima de las reglas de la base de reglas
   * que se conservar� tras la simplificaci�n si se ordenaran las reglas
   * seg�n su grado de activaci�n.
   *
   */
  protected int firstRuleIndex(KnowledgeBase rb) {
    return best;
  }
}
